/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CapaNegocios;
import controlrestaurante.pmf;
import controlador.OrdensalidaJpaController;
import controlador.DetalleordensalidaJpaController;
import entidad.Ordensalida;
import entidad.Detalleordensalida;
import java.util.Date;
import java.util.List;
/**
 *
 * @author a
 */
public class CNOrdenSalida {
    
    private static boolean insertarOrden(Ordensalida orden)
    {        
        try{
            OrdensalidaJpaController controlador = new OrdensalidaJpaController(pmf.getInstancia().getEMF());
            controlador.create(orden);
        }catch (Exception e){
            return false;
        }
        return true;  
    }
    public static boolean insertar(Ordensalida orden)
    {        
        try{
            List<Detalleordensalida> temp = (List)orden.getDetalleordensalidaCollection();
            orden.setDetalleordensalidaCollection(null);
            if(!insertarOrden(orden))
                return false;
            orden.setDetalleordensalidaCollection(temp);
            if(orden.getDetalleordensalidaCollection().isEmpty())
                return false;
            for(Detalleordensalida detalle : orden.getDetalleordensalidaCollection())
            {
                detalle.setOrdenSalidaidOrdenSalida(orden);
                detalle.setActivo(Boolean.TRUE);
                CNProducto.modificar(detalle.getProductoidProducto());
                DetalleordensalidaJpaController controlador = new DetalleordensalidaJpaController(pmf.getInstancia().getEMF());
                controlador.create(detalle);
            }
            
        }catch (Exception e){
            return false;
        }
        return true;  
    }
    
    
    public static boolean eliminar(Ordensalida orden)
    {
        if(orden.getDetalleordensalidaCollection().isEmpty())
                return false;
        for(Detalleordensalida temp : orden.getDetalleordensalidaCollection())
        {
            try
            {
                temp.getProductoidProducto().setCanitdad(
                                    temp.getProductoidProducto().getCanitdad()+temp.getCantidad());
                DetalleordensalidaJpaController hol = new DetalleordensalidaJpaController(pmf.getInstancia().getEMF());
                hol.destroy(temp.getIdDetalleOrdenSalida());
                CNProducto.modificar(temp.getProductoidProducto());
            }
            catch(Exception e){} 
        }
        try{
            OrdensalidaJpaController controlador = new OrdensalidaJpaController(pmf.getInstancia().getEMF());
            controlador.destroy(orden.getIdOrdenSalida());
        }catch (Exception e){
            return false;
        }
        return true;
    }
    
    public static boolean modificar(Ordensalida orden)
    {
        try{
            OrdensalidaJpaController controlador = new OrdensalidaJpaController(pmf.getInstancia().getEMF());
            controlador.edit(orden);
        }catch (Exception e){
            return false;
        }
        return true;  
    }
    
    public static boolean modificar(Ordensalida orden, List listaEliminados)
    {
        try
        {
            if(orden.getIdOrdenSalida()<=0)
                return false;
            if(orden.getDetalleordensalidaCollection().isEmpty())
                return false;
            if(!listaEliminados.isEmpty())
            {
                try{
                    List<Detalleordensalida> lista = (List<Detalleordensalida>)listaEliminados;
                    for(Detalleordensalida temp : lista)
                    {
                        temp.getProductoidProducto().setCanitdad(
                                temp.getProductoidProducto().getCanitdad()+temp.getCantidad());                        
                        DetalleordensalidaJpaController hol = new DetalleordensalidaJpaController(pmf.getInstancia().getEMF());
                        hol.destroy(temp.getIdDetalleOrdenSalida());
                        CNProducto.modificar(temp.getProductoidProducto());
                    }
                }catch(Exception e){}
            }
            
            for(Detalleordensalida temp : orden.getDetalleordensalidaCollection())
            {
                
                if(temp.getIdDetalleOrdenSalida()==null)
                {
                    DetalleordensalidaJpaController hol = new DetalleordensalidaJpaController(pmf.getInstancia().getEMF());
                    temp.setOrdenSalidaidOrdenSalida(orden);
                    temp.setActivo(Boolean.TRUE);    
                    CNProducto.modificar(temp.getProductoidProducto());
                    hol.create(temp);   
                }
            }
            return CNOrdenSalida.modificar(orden);            
        }
        catch(Exception e)
        {
            return false;
        }
    }
    
    
    public static List<Ordensalida> buscarFecha(Date date)  
    {
        List <Ordensalida> lista = null ;
        try{
           lista = (List) Consultas.consulta("Ordensalida", "findByFecha", "fecha", date); 
        }
        catch(Exception e)
        {
            return null;
        }
        
        return lista;
    }
    
     public static List<Ordensalida> buscarNoOrden(String numeroOrden)  
    {
        List <Ordensalida> lista = null ;
        try{
           lista = (List) Consultas.consulta("Ordensalida", "findByNoOrden", "noOrden", numeroOrden); 
        }
        catch(Exception e)
        {
            return null;
        }
        
        return lista;
    }
    
    public static List<Ordensalida> buscarTodos()
    {
        List <Ordensalida> lista = null ;
        try{
            OrdensalidaJpaController controlador = new OrdensalidaJpaController(pmf.getInstancia().getEMF());
            lista = controlador.findOrdensalidaEntities();
        }catch (Exception e){
            return null;
        }
        return lista;
    }
    
}
